Product development of simple hardware systems for the internet requires a significant learning curve and significant development time and resources. A typical product development effort is an iterative process of trading off one constraint against another, and often there is little synergy from one product development to the next, as different drivers and devices may be used in each development. Typically, the development must be started afresh for each version of a particular product. Additionally, many of the issues which arise are sequentially resolved, one by one, after they arise.
In Internet of Things (IoT) development, it is often the case that a common set of core functions are needed, and the common set of functions are supplemented with application-specific interface requirements. For example, Wireless Local Area Network (WLAN) products typically require a central processing unit (CPU), flash memory, dynamic ram (DRAM), which is often provided in the CPU, a WLAN interface comprising a WLAN interface chip and an antenna. A variant of this same product may require battery power, in which case the system architecture requires a low-power CPU, and the WLAN interface chip may be from a power-savings family. Each of these development efforts then requires a mechanical package, which will be different for each design. As a result, each design requires a unique design effort and associated separate schematic generation, board layout, mechanical packaging, and software development.
Because each product development requires a unique design effort, it is desired to provide an optimized method for product development of IoT devices which automates and generates the files required for software development, printed circuit board (PCB) fabrication, assembly files including a bill of materials (BOM), and mechanical packing files in the form of 3D fabrication files for molded enclosures or 3D printing for rapid prototypes.